package com.xiaoshuidi.cloud.module.finance.dal.mysql.finance;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.framework.mybatis.core.mapper.BaseMapperX;
import com.xiaoshuidi.cloud.framework.mybatis.core.util.MyBatisUtils;
import com.xiaoshuidi.cloud.module.finance.controller.admin.finance.vo.account.FinanceAccountAccumulationVO;
import com.xiaoshuidi.cloud.module.finance.controller.admin.finance.vo.account.FinanceAccountJournalPageReqVO;
import com.xiaoshuidi.cloud.module.finance.dal.dataobject.finance.FinanceAccountJournalDO;
import com.xiaoshuidi.cloud.module.finance.dal.dataobject.finance.FinanceAccountJournalExtDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface FinanceAccountJournalMapper extends BaseMapperX<FinanceAccountJournalDO> {
    default PageResult<FinanceAccountJournalExtDO> selectPage(FinanceAccountJournalPageReqVO reqVO) {
        IPage<FinanceAccountJournalExtDO> mpPage = MyBatisUtils.buildPage(reqVO);
        selectJournalPage(reqVO, mpPage);
        return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
    }

    default PageResult<FinanceAccountJournalExtDO> selectPageDetails(FinanceAccountJournalPageReqVO reqVO) {
        IPage<FinanceAccountJournalExtDO> mpPage = MyBatisUtils.buildPage(reqVO);
        selectJournalPageDetails(reqVO, mpPage);
        return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
    }

    IPage<FinanceAccountJournalExtDO> selectJournalPage(@Param("example") FinanceAccountJournalPageReqVO reqVO,
                                                        IPage<FinanceAccountJournalExtDO> page);

    IPage<FinanceAccountJournalExtDO> selectJournalPageDetails(@Param("example") FinanceAccountJournalPageReqVO reqVO
            , IPage<FinanceAccountJournalExtDO> page);


    /**
     * 账户累计
     *
     * @param accountIds
     * @return
     */
    List<FinanceAccountAccumulationVO> selectAccountAccumulation(@Param("ids") List<Integer> accountIds);

}
